草庐IT

带指针的 C++ vector

全部标签

c++ - vector 无效分配大小

当我尝试创建并调整一个vector以容纳最大数量的项目时(vector::max_size()),我在运行时遇到调试错误:"Invalidallocationsize:429467292"我想知道为什么你不能调整它的大小,如果max_size()应该返回vector中项目的最大数量......vectorvc;vc.resize(vc.max_size());我还尝试在VS2010中启用LARGADRESSAWARE:On,但这没有帮助。想知道这是否是正确的thoguth...有人知道吗? 最佳答案 max_size()是vecto

C++ 在 boost::mpl::vector 中为每个类加好友

如何在boost::mpl::vector中的每个类(class)都有一个类(class)friend?即,扩展为:templateclassA{friendclassmpl_vector[0];friendclassmpl_vector[1];...friendclassmpl_vector[n];}; 最佳答案 按照Andres的建议,使用boost预处理器进行处理。我试过了,不是很好,编译效率会很低。它也仅限于达到BOOST_MPL_LIMIT_VECTOR_SIZE。如果他的方法有效,那么它可能会更干净一些。A类.h:#if

c++ - 如何在 C++ 中打乱指针列表?

如何在C++中打乱STL指针列表?我在Player类上有指针的STLvector,我像std::random_shuffle(players.begin(),players.end());是否已经有不需要随机访问的洗牌列表算法,或者我需要将列表转换为vector=>洗牌=>返回列表?有没有更优雅的解决方案? 最佳答案 随机洗牌算法将特定元素与随机选择的元素交换。重复遍历列表获取元素是非常低效的(即O(n^2)操作)。这就是为什么最好(更快)将列表复制到数组一次,进行随机洗牌并可能恢复列表的原因。那将是3*n遍历,仍然是O(n)。

c++ - 将原始数据类型转换为 void 指针类型

我正在阅读有关pthreads的文章here.在一个例子中,他们给出了this源代码。在创建线程时,他们传递了一个long类型,类型转换为void*类型给函数!。在函数内部,他们接收这个值并反向转换以获得long值。问题1:是否允许将指针类型转换为原始数据类型,反之亦然(在C和C++中)?Q2。如果是这样,这样做是件好事吗?他们不应该创建一个指向这种long类型的指针,然后将此指针类型转换为void*并将其传递给函数。这种将基本类型转换为指针类型的想法让我感到很困惑?从任何指针类型到void*的转换都可以理解,但是原始数据类型如何存储在void*类型中?是否有可能在特定系统上原始类型的

c++ - 函数模板只接受双向迭代器或指针

我需要一个函数模板来接受两个可以是指针的迭代器。如果这两个参数是random_access迭代器,我希望返回类型是的对象std::iterator输入否则std::iterator类型。我也想让代码拒绝如果参数既不是双向迭代器也不是指针,则进行编译。我不能依赖第三方库,例如提升你能帮我解决这个函数的签名问题,让它接受双向迭代器和指针,但不能说是input_iterator、output_iterator、forward_iterators。我能想到的部分解决方案如下templateTfoo(Titer1,Titer2){constTtmp1=reverse_iterator(iter1

c++ - 返回指向 const 对象的 const 共享指针的 const vector

给定以下基于共享指针容器的类,classFoo;classBar{public://...conststd::vector>&getFoos()const{returnfoos_;}private:std::vector>foos_;};不会编译因为invalidinitializationofreferenceoftype‘conststd::vector,std::allocator>>&’fromexpressionoftype‘conststd::vector,std::allocator>>’foos_成员需要指向可变的Foo对象供Bar对象内部使用,但我不想要客户端代码调用

c++ - 这是从 std::vector 中删除项目的有效方法吗?

这是我更新vector中项目列表并删除其中一些项目的代码:std::vectorparticles;...inti=0;while(iupdate();if(shouldRemove){deleteparticles[i];particles[i]=particles.back();particles.pop_back();}else{i++;}}当我找到应该删除的项目时,我将其替换为vector中的最后一项,以避免可能多次复制后备数组的其余部分。是的,我知道这是过早的优化......这是从vector中删除项目的有效方法吗?我偶尔会在这个区域附近的某个地方遇到一些(!)崩溃,但无法准

c++ - 使用 QObject 属性的指针

自从我学习Qt以来,我一直对以下事实感到困惑:在我阅读的文档和书籍中,它们使用指针来表示作为QObject子类实例的属性,例如小部件。我知道QObjects会删除它们的子对象,但除非确实有必要,否则我们不应该避免使用指针吗?这是一个我不使用指针的工作示例:Widget.h文件:#include#include#includeclassWidget:publicQWidget{Q_OBJECTpublic:Widget(QWidget*parent=0);publicslots:voidchange(int);private:QSliderm_slider;QLabelm_label;Q

c++ - 在 C++ 中沿着二维 vector (塔防)移动

我正在写一个简单的塔防,我卡在了我的塔必须射击敌人的地方。使用这段代码:voidBullet::move(intx,inty,intspeed){Punktdelta={(x+speed)-this->x,(y+speed)-this->y};if(abs(delta.x)>1&&abs(delta.y)>1){this->x+=delta.x/this->speed;this->y+=delta.y/this->speed;}else{this->dead=true;}}其中方法参数是目标位置和速度。它应该沿着vector移动子弹直到它到达目标但是vector改变因为目标在移动。现在

c++ - C++ 中的函数指针和重写函数

我是C++的新手,现在对多态性概念和函数指针感到困惑。我脑子里有点困惑。在下面截取的代码中,我声明了一个指向BaseClass中方法的函数指针。然后我给它分配了&BaseClass::Print最后两行是我感到困惑的部分:为什么这两行不会产生相同的结果?我猜这是因为指针myPtr指向v表,但我不确定。另外,如果我想让myPtr调用重写的BaseClass::Print()函数,我该怎么做?谁能向我澄清一下?谢谢。#includeusingnamespacestd;classBaseClass{public:virtualvoidPrint(){cout*myPtr)();//print